window: Add a child property
authorMatthias Clasen <mclasen@redhat.com>
Sat, 2 May 2020 15:33:10 +0000 (11:33 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 5 May 2020 02:53:07 +0000 (22:53 -0400)
docs/reference/gtk/gtk4-sections.txt
gtk/gtkwindow.c
gtk/gtkwindow.h

index 4e65cbb834a2b5c7703ae1603ea3546440cdc958..55364be75addd610d6cef86a8123a46e5df4c9f0 100644 (file)
@@ -4203,6 +4203,8 @@ gtk_requisition_get_type
 GtkWindow
 GtkWindowClass
 gtk_window_new
+gtk_window_get_child
+gtk_window_set_child
 gtk_window_set_title
 gtk_window_set_resizable
 gtk_window_get_resizable
index 518d9518f5463c61105e48ad2ccf257b64b7e2a7..e18d46a0c2d45d7c30eb67d2cf592a3d182754e3 100644 (file)
@@ -293,6 +293,7 @@ enum {
   PROP_APPLICATION,
   PROP_DEFAULT_WIDGET,
   PROP_FOCUS_WIDGET,
+  PROP_CHILD,
 
   /* Readonly properties */
   PROP_IS_ACTIVE,
@@ -961,6 +962,14 @@ gtk_window_class_init (GtkWindowClass *klass)
                            GTK_TYPE_WIDGET,
                            GTK_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
 
+  window_props[PROP_CHILD] =
+      g_param_spec_object ("child",
+                           P_("Child"),
+                           P_("The child widget"),
+                           GTK_TYPE_WIDGET,
+                           GTK_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
+
+
   g_object_class_install_properties (gobject_class, LAST_ARG, window_props);
 
   /**
@@ -1937,6 +1946,9 @@ gtk_window_set_property (GObject      *object,
     case PROP_FOCUS_WIDGET:
       gtk_window_set_focus (window, g_value_get_object (value));
       break;
+    case PROP_CHILD:
+      gtk_window_set_child (window, g_value_get_object (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2020,6 +2032,9 @@ gtk_window_get_property (GObject      *object,
     case PROP_FOCUS_WIDGET:
       g_value_set_object (value, gtk_window_get_focus (window));
       break;
+    case PROP_CHILD:
+      g_value_set_object (value, gtk_window_get_child (window));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -8070,3 +8085,37 @@ gtk_window_maybe_update_cursor (GtkWindow *window,
         break;
     }
 }
+
+/**
+ * gtk_window_set_child:
+ * @window: a #GtkWindow
+ * @child: (allow-none): the child widget
+ *
+ * Sets the child widget of @window.
+ */
+void
+gtk_window_set_child (GtkWindow *window,
+                      GtkWidget *child)
+{
+  g_return_if_fail (GTK_IS_WINDOW (window));
+  g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+
+  gtk_window_add (GTK_CONTAINER (window), child);
+  g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_CHILD]);
+}
+
+/**
+ * gtk_window_get_child:
+ * @window: a #GtkWindow
+ *
+ * Gets the child widget of @window.
+ *
+ * Returns: (nullable) (transfer none): the child widget of @window
+ */
+GtkWidget *
+gtk_window_get_child (GtkWindow *window)
+{
+  g_return_val_if_fail (GTK_IS_WINDOW (window), NULL);
+
+  return gtk_bin_get_child (GTK_BIN (window));
+}
index 2563ac5cac4e8522e9102608810c1e32562c53a6..8333ac91600d6397b7037c250398a66e22850e21 100644 (file)
@@ -239,6 +239,12 @@ GDK_AVAILABLE_IN_ALL
 void            gtk_window_set_application      (GtkWindow          *window,
                                                  GtkApplication     *application);
 
+GDK_AVAILABLE_IN_ALL
+void     gtk_window_set_child              (GtkWindow    *window,
+                                            GtkWidget    *child);
+GDK_AVAILABLE_IN_ALL
+GtkWidget *gtk_window_get_child            (GtkWindow    *window);
+
 GDK_AVAILABLE_IN_ALL
 void     gtk_window_set_titlebar           (GtkWindow    *window,
                                             GtkWidget    *titlebar);